import config from '../../config'
export const asset = app => {
  app.use(async(ctx, next) => {
    ctx.asset = resolveAsset(require('../../asset.json'))
    await next()
  })
}
// 合并相应的chunk资源，传递到模版中使用
function resolveAsset(assetData) {
  let resolved = {}
  // 参数可以传递数据方式或者连续传参方式
  return (...args) => {
    if (!assetData) {
      return
    }
    // 对传参进行处理，如果传递是数组将第一个数组返回否则直接返回参数数组
    args = Array.isArray(args[0]) ? args[0] : args
    const key = args.join('_')

    // 如果已经存在直接返回
    if (resolved[key]) {
      return resolved[key]
    }
    console.log(args)
    let result = {}
    args.forEach((name) => {
      // 将assetData数据的键名与asset保持一致
      name = /vendor|common/.test(name) ? name : `js/${config.theme}/${name}`
      
      let files = assetData[name]
      for (let i in files) {
        if (!result.hasOwnProperty(i)) {
          result[i] = []
        }
        if (files[i]) {
          result[i] = result[i].concat(files[i])
        }
      }
    })
    
    // 在生成环境下剔除掉style.js的引用，
    // 在开放环境下不能剔除，因为webpack运行环境运行在内存中，css需要的加入需要依赖与allcss.js文件写入
    if (process.env.NODE_ENV === 'production') {
      let jsArr = result.js;
      jsArr.forEach((item, index) => {
        if (/entry\.style/.test(item)) {
          jsArr.splice(index, 1)
        }
      })
    }
    return resolved[key] = result
  }
}
